#!/bin/bash

# 环境变量设置脚本
set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否提供了环境参数
if [ $# -eq 0 ]; then
    log_error "请指定环境: dev, test, prod"
    echo "用法: $0 <environment>"
    echo "示例: $0 prod"
    exit 1
fi

ENVIRONMENT=$1
ENV_FILE=".env.${ENVIRONMENT}"
TEMPLATE_FILE=".env.${ENVIRONMENT}.template"

log_info "设置 ${ENVIRONMENT} 环境变量..."

# 检查模板文件是否存在
if [ ! -f "$TEMPLATE_FILE" ]; then
    log_error "模板文件 $TEMPLATE_FILE 不存在"
    exit 1
fi

# 如果环境文件不存在，从模板创建
if [ ! -f "$ENV_FILE" ]; then
    log_warning "环境文件 $ENV_FILE 不存在，从模板创建..."
    cp "$TEMPLATE_FILE" "$ENV_FILE"
    log_success "已创建 $ENV_FILE"
else
    log_info "环境文件 $ENV_FILE 已存在"
fi

# 生成随机密码的函数
generate_password() {
    openssl rand -base64 32 | tr -d "=+/" | cut -c1-25
}

# 生成JWT密钥的函数
generate_jwt_secret() {
    openssl rand -base64 64 | tr -d "=+/"
}

# 自动填充默认值（仅在生产环境）
if [ "$ENVIRONMENT" = "prod" ]; then
    log_info "为生产环境生成安全的默认值..."
    
    # 生成随机密码
    MONGO_PASSWORD=$(generate_password)
    REDIS_PASSWORD=$(generate_password)
    JWT_SECRET=$(generate_jwt_secret)
    
    # 替换模板中的占位符
    sed -i "s/your_strong_password_here/${MONGO_PASSWORD}/g" "$ENV_FILE"
    sed -i "s/your_redis_password_here/${REDIS_PASSWORD}/g" "$ENV_FILE"
    sed -i "s/your_super_secure_jwt_secret_key_change_this_in_production/${JWT_SECRET}/g" "$ENV_FILE"
    
    log_success "已生成安全的密码和密钥"
fi

# 验证环境文件
log_info "验证环境变量配置..."

# 检查必需的变量
required_vars=("NODE_ENV" "BACKEND_PORT" "MONGO_ROOT_USERNAME" "MONGO_ROOT_PASSWORD" "JWT_SECRET")

for var in "${required_vars[@]}"; do
    if ! grep -q "^${var}=" "$ENV_FILE" || grep -q "^${var}=$" "$ENV_FILE" || grep -q "^${var}=.*_here$" "$ENV_FILE"; then
        log_warning "变量 $var 未设置或使用默认值，请手动配置"
    fi
done

# 设置文件权限（安全性）
chmod 600 "$ENV_FILE"
log_success "已设置环境文件权限为 600"

# 创建环境变量导出脚本
cat > "scripts/load-env-${ENVIRONMENT}.sh" << EOF
#!/bin/bash
# 加载 ${ENVIRONMENT} 环境变量
if [ -f ".env.${ENVIRONMENT}" ]; then
    export \$(cat ".env.${ENVIRONMENT}" | grep -v '^#' | xargs)
    echo "已加载 ${ENVIRONMENT} 环境变量"
else
    echo "错误: .env.${ENVIRONMENT} 文件不存在"
    exit 1
fi
EOF

chmod +x "scripts/load-env-${ENVIRONMENT}.sh"

log_success "环境设置完成！"
log_info "请编辑 $ENV_FILE 文件并填入实际配置值"
log_info "使用 'source scripts/load-env-${ENVIRONMENT}.sh' 加载环境变量"